home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Monster Media 1996 #15
/
Monster Media Number 15 (Monster Media)(July 1996).ISO
/
prog_c
/
cuj0696.zip
/
DWYER.ZIP
/
SPECTRAL.TST
/
PUTXFRAC.CX
< prev
next >
Wrap
Text File
|
1996-03-09
|
3KB
|
121 lines
/* ============ */
/* PutXFrac.cx */
/* ============ */
#include <stdio.h>
#include <xtendefs.h>
#include <string.h>
/* ========================================================= */
/* fPutXFrac - Prints mixed fraction extended value on Unit */
/* ========================================================= */
void
fPutXFrac(FILE *Unit, USHORT * XFrac, short NFrac, short MinFld)
{
static
USHORT Eten[NE], InitDone = FALSE;
char AscVal[128] = {0};
short CharCt = 3, ExpVal;
char *CharLoc;
short i;
USHORT MyXFrac[NE];
if (!InitDone)
{
ASCTOX("10.0", Eten);
InitDone = TRUE;
}
XCOPY(XFrac, MyXFrac);
if (XGTE(MyXFrac, EZERO))
{ /* Input is positive */
fprintf(Unit, " "); /* Put blank for sign */
}
else
{
XABS(MyXFrac);
fprintf(Unit, "-"); /* Put Negative sign */
}
for (i = 1; i <= NFrac; ++i)
{
XRMULT(MyXFrac, Eten);
}
XROUND(MyXFrac, MyXFrac); /* Get Desired Digits Only */
XTOASC(MyXFrac, AscVal, NDEC); /* Convert to ASCII */
CharLoc = strrchr(AscVal, 'E');
*CharLoc = '\0';
sscanf(CharLoc + 1, "%d", &ExpVal); /* Get exponent */
CharLoc = AscVal + 1; /* Points past sign char */
if (ExpVal < NFrac)
{
fprintf(Unit, "0."); /* Minimum is three chars */
for (i = 1; i < NFrac - ExpVal ; ++i)
{
fprintf(Unit, "0");
++CharCt;
}
fprintf(Unit, "%c", *CharLoc++);/* Print Second char */
++CharLoc; /* Third char is '.' */
for (; i < NFrac; ++i)
{
fprintf(Unit, "%c", *CharLoc++);
++CharCt;
}
++CharCt;
}
else
{
/* ----------------- */
/* Print Second char */
/* ----------------- */
fprintf(Unit, "%c", *CharLoc++);
/* ----------------- */
/* Third char is '.' */
/* ----------------- */
++CharLoc;
for (i = NFrac; i < ExpVal; ++i)
{
if (*CharLoc) /* Print next character */
{
fprintf(Unit, "%c", *CharLoc++);
}
else
{
fprintf(Unit, "0"); /* Pad with zeros on right */
}
++CharCt;
}
fprintf(Unit, "."); /* Insert decimal point */
if (*CharLoc)
{
/* Append fraction */
for (i = 1; i <= NFrac; ++i)
{
fprintf(Unit, "%c", *CharLoc++);
++CharCt;
}
}
}
/* ----------------------------- */
/* Fill field with blanks on the */
/* right to MinFld characters. */
/* ----------------------------- */
for (; CharCt < MinFld; ++CharCt)
{
fprintf(Unit, " ");
}
}
/* ========================================================= */
/* PutXFrac - Prints mixed fraction extended value on stdout */
/* ========================================================= */
void
PutXFrac(USHORT * XFrac, short NFrac, short MinFld)
{
fPutXFrac(stdout, XFrac, NFrac, MinFld);
}